const { findAllCategories,saveCate } = require('../service/category.service')
const {
  cateSaveError
} = require('../constant/err.type')

class CategoryController {
  //查找所有分类数据
  async getData(ctx, next) {
    const res = await findAllCategories()

    //第一种方法实现，无法实现多层
    // let arr = []
    // res.forEach((item, index) => {
    //   arr[index] = {
    //     id: item['id'],
    //     title: item['title'],
    //     pid: item['parent_id']
    //   }
    // })

    // ///console.log(arr)

    // let newarr = []
    // arr.forEach((r) => {
    //   r.child = arr.filter((item) => item.pid == r.id)
    //   if (r.pid == 0) {
    //     newarr.push(r)
    //   }
    // })

    // console.log(newarr)

    //第二种实现方法
    let arr = []
    res.forEach((item, index) => {
      arr[index] = {
        id: item['id'],
        title: item['title'],
        pid: item['parent_id']
      }
    })

    function tree(arr) {
      let obj = {}
      arr.forEach((item) => {
        obj[item.id] = item
      })

      //console.log(obj, 'obj')

      let val = []
      arr.forEach((item) => {
        let parent = obj[item.pid]
        if (parent) {
          //1、只要“||”前面为false,不管“||”后面是true还是false，都返回“||”后面的值。
          ;(parent.children || (parent.children = [])).push(item)
        } else {
          val.push(item)
        }
      })

    return val
    }

    ctx.body = {
      data: tree(arr)
    }
  }

  //新增分类
  async saveCategory(ctx,next){
    
    //1.获取数据
    const { title,parent_id,level } = ctx.request.body
    console.log(title,parent_id,level)

    //2.操作数据库
    try {
      const res = await saveCate({title,parent_id,level})
      // console.log(res)

      //3.返回结果
      ctx.body = {
        code: 0,
        message: '新增分类成功',
        data: {
          id: res.id,
          title: res.title,
          parent_id:res.parent_id,
          level:res.level
        }
      }
    } catch (err) {
      ctx.app.emit('error', cateSaveError, ctx)
    }
  }
}

module.exports = new CategoryController()
